package com.qf.anno.controller;

import com.qf.anno.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

//@Component
@Controller
public class UserController {

    /*
        @Autowired 这个注解在spring容器中查找对象时
            ① 查找和当前变量名相同名字的对象（通过名字找对象）
            ② 如果按照名字找不到对象，按照变量类型查找对象，如果能找到唯一的一个该类型对象，使用
            ③ 如果找到多个,会看这多个对象上是否有@Primary注解，如果有唯一的一个上面有这个注解，使用
            ④ 如果找到多个，同时有多个都加了@Primary注解，此时报错
        @Qualifier: 结合Autowired注解一起使用，用来指定要查找的对象的名字。
            ***如果结合了这个注解使用，那么上述的①②③④都无效。
     */
    @Autowired  //依赖注入（引用类型对象）
    @Qualifier("userServiceImpl2")
    private UserService userService;

    /*
        @Value 这个注解用来注入普通数据类型的属性值，一般结合外部属性配置文件使用
            先通过@PropertySource引入外部属性配置文件
            在属性上通过@Value("${配置文件中属性的键名}") 获取指定键配置的值
     */
    @Value("zhangsan")
    private String name;

    @Autowired
    private DataSource ds;


    public void show() throws SQLException {
        System.out.println(userService);
        System.out.println("=======");
        System.out.println(name);

        System.out.println("===========");
        Connection connection = ds.getConnection();
        System.out.println(connection);
    }
}
